//引入路由器
import router from './router/index'

//引入仓库
import pinia from './stores/index'
import { getLoginStore } from './stores/login'
//添加前置守卫
let LoginStore = getLoginStore(pinia)

//未登录的白名单
let whiteList = ['/ucenter', '/cart'];


//解决第一个问题:token
//登录、注册、首页、搜素、详情、购物车、加入购物车成功
//未登录:顶部七个路由可以随便进
//登录:登录、注册不能在访问，其余五个可以进入
//解决第二个问题:用户信息问题
router.beforeEach(async (to, from, next) => {
    //获取仓库里面token
    let nickName = LoginStore.nickName;
    //获取仓库里面用户信息
    let hasToken = localStorage.getItem('token');
    //决定用户登陆了
    if (hasToken) {
        //如果登录成功,不能去登录注册页面
        if (to.path == '/login' || to.path == '/register') {
            next('/home')
        } else {
            //登录成功以后,判断有没有用户信息
            //如果用户信息放行，如果没有用户信息，通知vuex发请求，获取用户信息以后再放行
            if (nickName) {
                //如果有用户信息放行
                next();
            } else {
                try {
                    //没有用户信息发请求获取用户信息以后再放行
                    await LoginStore.reggetuser()
                    // await store.dispatch('getUserInfo');
                    next();
                } catch (error) {
                    //用户登录(token),发请求获取用户信息失败[token过期了!!!]
                    //先清空前端项目本地数据
                    await LoginStore.removetoken()
                    // await store.dispatch('logout');
                    //让用户再次登录，获取新的token
                    next("/login")
                }
            }

        }
    } else {
        //login|register|home|search|detail|addcartsuccess|shopcart  放行
        //|trade|pay|paysuccess|center 未登录放行->login
        if (whiteList.includes(to.path)) {
            //next类似于导航:
            console.log(1111);

            next('/login?redirect=' + to.path);
        } else {
            next();
        }

    }
});
